package cn.heyige.backend.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.heyige.backend.entity.HexagramDO;
import cn.heyige.backend.entity.YaoCiDO;

import java.util.List;
import java.util.Optional;

/**
 * 卦象服务接口 - 精简版
 *
 * 专注于核心卦象管理功能，提高系统性能和可维护性
 *
 * @author CodeBuddy
 */
public interface HexagramService extends IService<HexagramDO> {
    
    /**
     * 根据卦象编码获取卦象
     *
     * @param code 卦象编码
     * @return 卦象对象
     */
    Optional<HexagramDO> getHexagramByCode(String code);
    
    /**
     * 根据卦名获取卦象
     *
     * @param name 卦名
     * @return 卦象对象
     */
    Optional<HexagramDO> getHexagramByName(String name);
    
    /**
     * 获取所有卦象
     *
     * @param pageNum 当前页
     * @param pageSize 页大小
     * @return 卦象列表
     */
    IPage<HexagramDO> getAllHexagrams(Integer pageNum, Integer pageSize);
    
    /**
     * 根据卦象ID获取所有爻辞
     *
     * @param hexagramId 卦象ID
     * @return 爻辞列表
     */
    List<YaoCiDO> getYaoCiByHexagramId(Integer hexagramId);
    
    /**
     * 根据卦象ID和爻位获取爻辞
     *
     * @param hexagramId 卦象ID
     * @param yaoPosition 爻位
     * @return 爻辞对象
     */
    YaoCiDO getYaoCiByHexagramIdAndPosition(Integer hexagramId, Integer yaoPosition);
    
    /**
     * 搜索卦象
     *
     * @param keyword 关键字
     * @param pageNum 当前页
     * @param pageSize 页大小
     * @return 卦象列表
     */
    IPage<HexagramDO> searchHexagrams(String keyword, Integer pageNum, Integer pageSize);
    
    /**
     * 根据五行属性获取卦象
     *
     * @param fiveElements 五行属性
     * @param pageNum 当前页
     * @param pageSize 页大小
     * @return 卦象列表
     */
    IPage<HexagramDO> getHexagramsByFiveElements(String fiveElements, Integer pageNum, Integer pageSize);
}